
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.sql.SQLException;
import java.text.ParseException;
import javax.swing.text.MaskFormatter;

public class AjoutListe extends JDialog implements ActionListener, KeyListener {

  private JLabel lNom;
  private JLabel lDate;
  private JTextField tNom;
  private JTextField tDate;
  private JButton bOk;
  private JButton bQuit;
  private Container contenu;

  public AjoutListe() {
    super((JDialog) null, true);
    this.setLayout(null);
    this.setTitle("Ajout Liste");

    this.lNom = new JLabel("Nom : ");
    this.lDate = new JLabel("Date (aaaa-mm-jj) : ");
    this.tNom = new JTextField();

    MaskFormatter mask = null;

    try {
      mask = new MaskFormatter("####-##-##");
    } catch (ParseException e) {
      System.out.println("Problème dans le masque de la date");
    }
    this.tDate = new JFormattedTextField(mask);


    this.bOk = new JButton("Créer");
    this.bOk.addActionListener(this);

    this.bQuit = new JButton("Annuler");
    this.bQuit.addActionListener(this);

    this.tNom.addKeyListener(this);
    this.tDate.addKeyListener(this);

    this.contenu = this.getContentPane();

    this.contenu.add(this.lNom);
    this.contenu.add(this.lDate);
    this.contenu.add(this.tNom);
    this.contenu.add(this.tDate);
    this.contenu.add(this.bOk);
    this.contenu.add(this.bQuit);

    this.lNom.setBounds(20, 10, 140, 20);
    this.tNom.setBounds(160, 10, 122, 20);
    this.lDate.setBounds(20, 40, 140, 20);
    this.tDate.setBounds(160, 40, 122, 20);
    this.bOk.setBounds(40, 85, 100, 20);
    this.bQuit.setBounds(160, 85, 100, 20);

    this.setBounds(20, 20, 300, 140);
    this.setResizable(false);
    this.setVisible(true);
  }

  public void actionPerformed(ActionEvent e) {
    // On créé une nouvelle liste
    if (e.getSource() == bOk) {
      this.nouvelleListe();
    }

    if (e.getSource() == bQuit) {
      this.dispose();
    }
  }

  public void keyTyped(KeyEvent e) {
  }

  public void keyPressed(KeyEvent e) {
    int key = e.getKeyCode();
    switch (key) {
      case KeyEvent.VK_ESCAPE:
        this.dispose();
        break;
      case KeyEvent.VK_ENTER:
        this.nouvelleListe();
        break;
    }
  }

  public void keyReleased(KeyEvent e) {
  }

  private void nouvelleListe() {
    // On vérifie la date
    boolean ok = false;
    Date d = null;
    try {
      d = new Date(this.tDate.getText());
      ok = true;
    } catch (IllegalArgumentException errDate) {
      JOptionPane.showMessageDialog(this, "Date saisie incorrecte", "Erreur Saisie", JOptionPane.ERROR_MESSAGE);
    }

    if (ok) {
      if (this.tNom.getText().equals("")) {
        JOptionPane.showMessageDialog(this, "Vous devez entrer un nom pour la liste", "Erreur Saisie", JOptionPane.ERROR_MESSAGE);
      } else {
        try {
          Liste l = new Liste(this.tNom.getText(), d);//JOptionPane.showMessageDialog(this, "La liste "+l.getNom()+" ("+l.getDateButoire()+") a bien été créée", "Erreur Saisie", JOptionPane.INFORMATION_MESSAGE);
          this.dispose();
        } catch (SQLException pbCreaListe) {
          JOptionPane.showMessageDialog(this, "Connexion impossible à la base de donnée, création de la liste abandonnée", "Erreur BDD", JOptionPane.ERROR_MESSAGE);
        }
      }
    }
  }
}